<?php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{

    /**
     * Evita que o usuário acesse o caminho sem a utilização de www. Muito importante para utilização de SESSION
     *
     * @todo verificar qual é o link da secretaria para todos os demais modulos
     * @access protected
     * @param void
     * @return void
     */
    protected function _initRedirect()
    {
        if ($_SERVER['HTTP_HOST'] == 'sedf.gov.br') {
            header("location:http://sedf.gov.br");
        }
    }
    
    
    /**
     * Preapara o sistema para executar o cache para (paginator|dbTable|options|translate|locale)
     *
     * @access protected
     * @param void
     * @return array|object Zend_Registry
     */
    protected function _initCache()
    {
        if (is_writable(APPLICATION_PATH . '/../data/cache')) {
            $frontendOptions = array(
                'lifetime'                  => 7200,
                'automatic_serialization'   => true
            );

            $backendOptions = array(
                'cache_dir'                 => APPLICATION_PATH . '/../data/cache/',
                'read_control_type'         => 'adler32',
                'hashed_directory_level'    => 1
            );

            $cache = Zend_Cache::factory(
                'Core',                                         # Metodo utilizado
                'File',                                         # Como será gravado o cache
                $frontendOptions,                               # Pega o que foi passado no FrontEnd
                $backendOptions);                               # pega o que foi passado no BackEnd


            Zend_Paginator::setCache($cache);                   # Cache do Zend_Paginator
            Zend_Db_Table::setDefaultMetadataCache($cache);     # Cache da tabela que será usada
            Zend_Date::setOptions(array('cache' => $cache));    # Cache para o Zend_Date
            Zend_Locale::setCache($cache);                      # Cache para o Zend_Locale

            Zend_Registry::set('cache', $cache);                # Registra em $Cache o que foi e será gravado.
        }
    }
    

    /**
     * Cria as regras e os recursos para serem utilizados na aplicação
     *
     * @access protected
     * @param void
     * @return array|object Zend_Registry
     */
    protected function _initAcl()
    {
        $cache = Zend_Registry::get('cache');               # Pega tudo o que foi salvo na cache. Mesmo que esteja vazio
        $acl   = $cache->load('acl');                       # Pega somente o campo acl, mesmo que esteja vazio.
 
        if (!$acl) {
            $acl = new Zend_Acl();
 
            /*
             * O último a ser declarado é sempre o mais forte e herda o próximo
             * declarado na frente. a menos que eu não queira.
             * 0 => Visitante sem vínculo.
             * 1 => Administrador
             * 2 => SEDE
             * 3 => CRE
             * 4 => Professor
             */
            $acl->addRole('0')
                ->addRole('4')
                ->addRole('3')
                ->addRole('2')
                ->addRole('1', '2');
 
 
            /*
             * Aqui será declarado os controllers, tendo em vista que este meu sistema
             * é baseado na restrição de module:controllers e de actions.
             */
            $acl->addResource('default:error')
                ->addResource('default:index')
 
                ->addResource('remanejamento:acesso')
                ->addResource('remanejamento:inicial')
                ->addResource('remanejamento:inscricao')
                    
                ->addResource('admin:remanejamento');
 
 
            /*
             * O primeiro parametro diz respeito ao usuário, 
             * o segundo ao module:controller e 
             * o terceiro à view array().
             */
            $acl->allow('0', 'default:index', array('index'))   
                ->allow('0', 'remanejamento:acesso', array('index', 'login'))     
                     
                ->allow('1', 'remanejamento:acesso', array('index', 'login', 'logout'))
                ->allow('1', 'remanejamento:inicial', array('index'))
                ->allow('1', 'remanejamento:inscricao', array('index', 'etapa1', 'etapa2', 'etapa3', 'etapa4', 'etapa5', 'imprimir-comprovante'))
                ->allow('1', 'admin:remanejamento', array('index'));
                
                $cache->save($acl, 'acl');
        }
         
        Zend_Registry::set('acl', $acl);
    }
    
    
    /**
     * Inicializa os modulos de acordo com as requisições dos usuários. Isso evita que todos os bootstraps, helpers e outras classes internas sejam chamadas em modulos diferentes.
     * 
     * @param void
     * @return \Zend_Application_Module_Autoloader 
     */
    protected function _initModules()
    {
        $autoloader = new Zend_Application_Module_Autoloader(array('namespace' => 'Remanejamento', 'basePath' => APPLICATION_PATH."/modules/remanejamento"));
        $autoloader = new Zend_Application_Module_Autoloader(array('namespace' => 'Admin',         'basePath' => APPLICATION_PATH."/modules/admin"));
        return $autoloader;
    }

}

